package com.hq.security;

import java.util.concurrent.FutureTask;

/**
 * 线程安全问题分析：
 * 1、如果你的操作只是读操作，那么就可以认为这是线程安全的。
 * 2、线程安全都是由全局变量以及静态变量引起的。
 * 3、有多个线程同时进行写操作，这里就会产生线程安全问题。
 * 线程产生不安全问题总结：
 * 1、多个线程抢占统一资源。
 * 2、多共享的资源有写操作。
 * <p>
 * 具体锁的说明在 TicketSecutityCallable 类中
 *
 * @author hq
 */
public class TicketThreadSecurityDemo {

    /**
     * 超卖demo
     */
    public static void main(String[] args) throws Exception {
        TicketSecutityCallable ticket = new TicketSecutityCallable();
        FutureTask<String> futureTask1 = new FutureTask<>(ticket);
        FutureTask<String> futureTask2 = new FutureTask<>(ticket);
        FutureTask<String> futureTask3 = new FutureTask<>(ticket);

        Thread thread1 = new Thread(futureTask1, "窗口1");
        Thread thread2 = new Thread(futureTask2, "窗口2");
        Thread thread3 = new Thread(futureTask3, "窗口3");

        thread1.start();
        thread2.start();
        thread3.start();
        //get方法阻塞线程  不需要在sleep 主线程
        System.out.println(futureTask1.get());
        System.out.println(futureTask2.get());
        System.out.println(futureTask3.get());
    }
}
